package com.tom.architect.day04;

import android.app.Activity;
import android.view.View;

import java.lang.reflect.Field;

/**
 * Added by Tom on 2023/12/07.
 * ButterKnife是通过APT生成代码实现。
 * 反射+注解实现。findViewById。早期的 xUtils里面用的比较多。
 */
public class ViewUtils {

    // 注入的形式。实现功能。
    public static void inject(Activity activity) {
        // 1.获取所有的属性， 纯反射的方式实现。
        Field[] fields = activity.getClass().getDeclaredFields();
        // 2.过滤所有viewById的属性。
        for (Field field : fields) {
            ViewById viewById = field.getAnnotation(ViewById.class);
            if (viewById != null) {
                // 3.findViewById, 传入id的值。
                View view = activity.findViewById(viewById.value());
                // 4.反射注入
                field.setAccessible(true);
                try {
                    // activity field 属性所在的类，view代表的是属性的值。
                    field.set(activity, view);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
